home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Linux / Kubuntu 8.10 / kubuntu-8.10-desktop-i386.iso / casper / filesystem.squashfs / usr / sbin / hplj1000 < prev    next >
Text File  |  2008-09-09  |  5KB  |  222 lines

  1. #!/bin/sh
  2.  
  3. #    hplj1000:
  4. #    hplj1005:
  5. #    hplj1020:
  6. #
  7. #    Hotplug script for HP1000/1005 USB laser printers.  The model number
  8. #    that this script deals with is determined from the script name.
  9. #
  10. #    Used to download firmware automatically into the printer when it
  11. #    is powered up or plugged into the USB port.
  12. #
  13. #    Also, run this script once with the magic argument "install-usermap"
  14. #    to create the proper entry in the /etc/hotplug/usb.usermap file.
  15. #
  16. #    The inspiration fo this script is from:
  17. #        Oscar Santacreu. Alicante-Spain (2002)
  18. #        Mike Morgan (2004)
  19. #
  20.  
  21. # udev calls us twice on FC4! Just want /dev/usb/lp<N>
  22. case "$DEVNAME" in
  23. /dev/usb/usb*)    exit;;
  24. esac
  25.  
  26. PROGNAME="$0"
  27.  
  28. #
  29. # Set $DEV to, e.g. /dev/usb/lp0, to force the device you want
  30. # Else, leave it null to automatically detect the device
  31. #
  32. DEV=/dev/usb/lp0
  33. DEV=""
  34.  
  35. #
  36. # Directory to find downloadable HP firmware files sihpMMMM.dl
  37. #
  38. FWDIR=/usr/share/foo2zjs/firmware
  39.  
  40. #
  41. # Program used to determine USB printer id information
  42. #
  43. PRINTERID=/usr/bin/usb_printerid
  44.  
  45. #
  46. #    Figure out how to log our messages
  47. #
  48. if [ -t 1 ]; then
  49.     # Running from a tty...
  50.     log() {
  51.     echo "$PROGNAME: foo2zjs: $@"
  52.     }
  53. elif [ -x /usr/bin/logger ]; then
  54.     # Have logger...
  55.     log() {
  56.     logger -t "$PROGNAME" -- "foo2zjs: $@"
  57.     }
  58. else
  59.     # No logger...
  60.     log() {
  61.     echo "$PROGNAME: foo2zjs: $@" >> /var/log/messages
  62.     }
  63. fi
  64.  
  65. #
  66. #    Figure out the model number from the name of this script
  67. #
  68. case "$0" in
  69. *P1005)
  70.     MODEL=P1005; FWMODEL=$MODEL
  71.     USB1=0x03f0    #Vendor
  72.     USB2=0x3d17    #Model
  73.     FWDIR=/usr/share/foo2xqx/firmware
  74.     ;;
  75. *P1006)
  76.     MODEL=P1006; FWMODEL=$MODEL
  77.     USB1=0x03f0    #Vendor
  78.     USB2=0x3e17    #Model
  79.     FWDIR=/usr/share/foo2xqx/firmware
  80.     ;;
  81. *P1007)
  82.     MODEL=P1007; FWMODEL=P1005        # Alias
  83.     USB1=0x03f0    #Vendor
  84.     USB2=0x4817    #Model
  85.     FWDIR=/usr/share/foo2xqx/firmware
  86.     ;;
  87. *P1008)
  88.     MODEL=P1008; FWMODEL=P1006        # Alias
  89.     USB1=0x03f0    #Vendor
  90.     USB2=0x4917    #Model
  91.     FWDIR=/usr/share/foo2xqx/firmware
  92.     ;;
  93. *P1505)
  94.     MODEL=P1505; FWMODEL=$MODEL
  95.     USB1=0x03f0    #Vendor
  96.     USB2=0x3f17    #Model
  97.     FWDIR=/usr/share/foo2xqx/firmware
  98.     ;;
  99. *P1505n)
  100.     MODEL=P1505n; FWMODEL=$MODEL
  101.     USB1=0x03f0    #Vendor
  102.     USB2=0x4017    #Model
  103.     FWDIR=/usr/share/foo2xqx/firmware
  104.     ;;
  105. *1000)
  106.     MODEL=1000; FWMODEL=$MODEL
  107.     USB1=0x03f0    #Vendor
  108.     USB2=0x0517    #Model
  109.     ;;
  110. *1005)
  111.     MODEL=1005; FWMODEL=$MODEL
  112.     USB1=0x03f0    #Vendor
  113.     USB2=0x1317    #Model
  114.     ;;
  115. *1018)
  116.     MODEL=1018; FWMODEL=$MODEL
  117.     USB1=0x03f0 #Vendor
  118.     USB2=0x4117 #Model
  119.     ;;
  120. *1020)
  121.     MODEL=1020; FWMODEL=$MODEL
  122.     USB1=0x03f0 #Vendor
  123.     USB2=0x2b17 #Model
  124.     ;;
  125. *)
  126.     log "Only HP LaserJet 100[05],1018,1020,P100[5678],P1505 are supported"
  127.     exit
  128.     ;;
  129. esac
  130.  
  131. #
  132. #    The special command line argument "install-usermap" will install
  133. #    the proper entry into the /etc/hotplug/usb.usermap file
  134. #
  135. case "$1" in
  136. install-usermap)
  137.     if [ "$USB2" != "" ]; then
  138.     if [ -w /etc/hotplug/usb.usermap ]; then
  139.         USERMAP=/etc/hotplug/usb.usermap
  140.     elif [ -d /etc/hotplug/usb/ ]; then
  141.         USERMAP=/etc/hotplug/usb/foo2zjs.usermap
  142.         if [ ! -s $USERMAP ]; then
  143.             echo > $USERMAP
  144.         fi
  145.     else
  146.         log "No /etc/hotplug usermap!"
  147.         exit
  148.     fi
  149.     chmod 664 $USERMAP
  150.     ex - $USERMAP <<-EOF
  151.     g/^hplj$MODEL/d
  152.     \$a
  153.     hplj$MODEL 0x0003 $USB1 $USB2 0x0000 0x0000 0x00 0x00 0x00 0x00 0x00 0x00 0x00000000
  154.     .
  155.     w
  156.     q
  157.     EOF
  158.     else
  159.     log "I don't know the USB info for this model yet.  Please run"
  160.     log "usb_printerid on the usb device and send the output to:"
  161.     log "rick.richardson@comcast.net"
  162.     fi
  163.     exit 0
  164.     ;;
  165. esac
  166.  
  167. #
  168. #    Procedure to load a single device with firmware
  169. #
  170. load1() {
  171.     _dev="$1"
  172.     fw="$FWDIR/sihp$FWMODEL.dl"
  173.     if [ ! -f "$fw" ]; then
  174.     log "Missing HP LaserJet $MODEL firmware file $fw"
  175.     log "...read foo2zjs installation instructions and run ./getweb $MODEL"
  176.     return 1
  177.     fi
  178.  
  179.     log "loading HP LaserJet $MODEL firmware $fw to $_dev ..."
  180.     # There is a timeout problem with udev and FC4, so spin it off.
  181.     (
  182.     if cat $fw > $_dev; then
  183.         log "... download successful."
  184.     else
  185.         log "... download failed."
  186.     fi
  187.     ) &
  188.     return 0
  189. }
  190.  
  191. #
  192. #    OK, now download firmware to any printers that need it
  193. #
  194. if [ "$DEV" != "" ]; then
  195.     #
  196.     # force downloading to a specific device
  197.     #
  198.     load1 "$DEV"
  199. elif [ -x $PRINTERID ]; then
  200.     #
  201.     # Sniff around for printers that need a firmware download
  202.     #
  203.     usblps=`find /dev/usb -name lp*`" "`find /dev -name usblp*`
  204.     for dev in $usblps; do
  205.     status=`$PRINTERID $dev 2>/dev/null | grep -y "hp LaserJet $MODEL"`
  206.     if [ "$status" != "" ]; then
  207.         # This is a LaserJet 100x
  208.         chmod 0666 $dev
  209.         status=`$PRINTERID $dev | grep 'FWVER'`
  210.         if [ "$status" = "" ]; then
  211.         # Firmware is not yet loaded
  212.         load1 "$dev"
  213.         else
  214.         log "HP LaserJet $MODEL firmware already loaded into $dev"
  215.         fi
  216.     fi
  217.     done
  218. else
  219.     log "HP LaserJet $MODEL firmware was not downloaded..."
  220.     log "...couldn't find $PRINTERID and DEV is not set"
  221. fi
  222.